#!/bin/bash

# 清屏并显示信息
clear
echo -e "小战云原创脚本官网：https://idc.sanxiaozhan.org/"
echo -e "小战云 为您提供稳定可靠的云服务 国内服务器40元起，海外服务器20元起"
sleep 5s

# 函数：验证swap大小输入是否有效
validate_swap_size() {
    if [[ $1 =~ ^[0-9]+$ ]] && [ $1 -le 10 ]; then
        return 0
    else
        echo "无效的swap大小。请输入一个不超过10G的数字。"
        return 1
    fi
}

# 函数：移除现有的swap分区
remove_existing_swap() {
    swap_file=$(swapon --show=NAME --noheadings)

    if [ -n "$swap_file" ]; then
        echo "检测到现有的swap分区：$swap_file"
        # 停用现有的swap分区
        swapoff $swap_file

        # 从/etc/fstab中删除swap文件条目
        sed -i "\|$swap_file|d" /etc/fstab

        # 删除swap文件
        if [ -f "$swap_file" ]; then
            rm -f $swap_file
            echo "swap 文件已成功删除：$swap_file"
        fi
    else
        echo "没有检测到现有的swap分区。"
    fi
    
    # 显示内存使用情况
    free -m
}

# 函数：添加swap分区
add_swap() {
    # 提示用户输入swap大小（以GB为单位）
    while true; do
        read -p "请输入swap容量（最大10G，以GB为单位）： " swap_size_gb
        validate_swap_size $swap_size_gb && break
    done

    # 将GB转换为MB以供fallocate使用
    swap_size_mb=$((swap_size_gb * 1024))

    # 提示用户输入swap文件所在的文件夹路径
    read -p "请输入swap文件所在的文件夹路径： " swap_dir

    # 如果文件夹不存在，则创建它
    if [ ! -d "$swap_dir" ]; then
        mkdir -p $swap_dir
        echo "目录 $swap_dir 已创建。"
    fi

    # 设置swap文件路径
    swap_file="$swap_dir/swapfile"

    # 创建swap文件
    fallocate -l ${swap_size_mb}M $swap_file

    # 设置权限
    chmod 0600 $swap_file

    # 设置swap区域
    mkswap $swap_file

    # 启用swap
    swapon $swap_file

    # 添加到/etc/fstab以便开机时自动挂载
    if ! grep -q "$swap_file" /etc/fstab; then
        echo "$swap_file none swap sw 0 0" >> /etc/fstab
    fi

    # 显示内存使用情况
    free -m

    echo "swap 已成功创建并启用。"
}

# 主菜单
echo "请选择操作："
echo "1. 添加 swap"
echo "2. 删除 swap"
read -p "请输入操作序列号（1 或 2）： " action

case $action in
    1)
        remove_existing_swap
        add_swap
        ;;
    2)
        remove_existing_swap
        ;;
    *)
        echo "无效的选择。"
        ;;
esac
